home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / diskBoot.OpenProm / RCS / start.s,v < prev    next >
Text File  |  1989-06-08  |  5KB  |  239 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @# @;
  7.  
  8.  
  9. 1.5
  10. date     89.01.06.08.10.09;  author brent;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     86.07.23.13.32.14;  author brent;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     86.07.21.09.30.35;  author brent;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     86.07.16.13.22.55;  author brent;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     86.07.16.11.16.16;  author brent;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @Sun Unix code to do the first few things as a boot program.
  37. @
  38.  
  39.  
  40. 1.5
  41. log
  42. @SUN_ => MACH_
  43. @
  44. text
  45. @|* start.s
  46. |*
  47. |*    Initial instructions executed by a boot program loaded by the PROM.
  48. |*    This is derived from 
  49. |*    "@@(#)srt0.s    4.15 83/10/12    Copyr 1983 Sun Micro";
  50. |*    The first thing done here is to relocate the boot program if
  51. |*    the boot PROM hasn't loaded the program into the expected place.
  52. |*    After that the stack is set up, BSS area is zero filled, and
  53. |*    then the code jumps to main().  The entry point to transfer to
  54. |*    another program is also defined here.
  55. |*
  56. #ifndef lint
  57. .data
  58. .asciz "$Header: start.s,v 1.4 86/07/23 13:32:14 brent Exp $ SPRITE (Berkeley)"
  59. .even
  60. #endif not lint
  61. .text
  62.  
  63. #include "machConst.h"
  64.  
  65.     .globl    _endText
  66.     .globl    _endData
  67.     .globl    _endBss
  68.     .globl    _main
  69.     .globl    _Boot_Exit
  70.     .globl    _Boot_Transfer
  71.  
  72.     .globl    start
  73. start:
  74.     movw    #MACH_SR_HIGHPRIO,sr    | lock out interrupts, just in case
  75. leax:    lea    pc@@(start-(leax+2)),a0    | True current location of "start"
  76.     lea    start:l,a1        | Desired      location of "start"
  77.     cmpl    a0,a1
  78.     jeq    begin            | If the same, just go do it.
  79.     movl    #_endData,d0        | Desired end of program
  80.     subl    a1,d0            | Calculate length, round up.
  81.     lsrl    #2,d0
  82. movc:    movl    a0@@+,a1@@+        | Move it where it belongs.
  83.     dbra    d0,movc
  84.     jmp    begin:l            | Force non-PCrel jump
  85.  
  86. begin:
  87.     movl    sp,start-4:l        | Save old stack pointer value
  88.     lea    start-4:l,sp        | Set up new stack below load point
  89.     movl    #_endData,a0        | Zero fill BSS area (and _endData)
  90. clr:
  91.     clrl    a0@@+
  92.     cmpl    #_endBss,a0
  93.     ble    clr
  94. |
  95. | Argc and argv are set to zeros here and the boot main program knows
  96. | to get arguments from the monitor vector.
  97. |
  98.     clrl    sp@@-            | argv = 0 for now.
  99.     clrl    sp@@-            | argc = 0 for now.
  100.     jsr    _main
  101.     addqw    #8,sp
  102.     jsr    _Exit            | after main() returns, call Exit().
  103. | Just fall thru into _Boot_Exit if exit() ever returns.
  104.  
  105. _Boot_Exit:
  106.     movl    start-4:l,sp        | Restore caller's stack pointer
  107.     rts                | Return to caller (PROM probably)
  108.  
  109. | Boot_Transfer --
  110. | Transfer control to a new program, no arguments are set up.
  111.  
  112. _Boot_Transfer:
  113.     movl    sp@@(4),a0        | Address to call
  114.     movl    a0,sp            | Set the stack below the load point
  115.     jra    a0@@            | Jump to callee using new stack
  116.  
  117. @
  118.  
  119.  
  120. 1.4
  121. log
  122. @fiddled with Boot_Transfer.  The old version would be fine too.
  123. We arn't passing parameters to the booted program anyway.
  124. @
  125. text
  126. @d14 1
  127. a14 1
  128. .asciz "$Header: start.s,v 1.3 86/07/21 09:30:35 brent Exp $ SPRITE (Berkeley)"
  129. d19 1
  130. a19 1
  131. #include "sunSR.h"
  132. d30 1
  133. a30 1
  134.     movw    #SUN_SR_HIGHPRIO,sr    | lock out interrupts, just in case
  135. @
  136.  
  137.  
  138. 1.3
  139. log
  140. @fixed RCS header.
  141. @
  142. text
  143. @d14 1
  144. a14 1
  145. .asciz "$Header$ SPRITE (Berkeley)"
  146. d65 3
  147. a67 2
  148. | Transfer control to a new program, passing on the same arguments that
  149. | we (start.s) received when we were started.
  150. d70 2
  151. a71 2
  152.     movl    start-4:l,sp        | Restore caller's stack pointer
  153.     jra    a0@@            | Jump to callee using caller's stk
  154. @
  155.  
  156.  
  157. 1.2
  158. log
  159. @Spritified version of srt0.o
  160. @
  161. text
  162. @d12 1
  163. d14 1
  164. a14 1
  165. .asciz "$Header"
  166. d16 1
  167. @
  168.  
  169.  
  170. 1.1
  171. log
  172. @Initial revision
  173. @
  174. text
  175. @d1 15
  176. a15 4
  177.     .data
  178.     .asciz    "@@(#)srt0.s    4.15 83/10/12    Copyr 1983 Sun Micro";
  179.     .even
  180.     .text
  181. d17 1
  182. a17 1
  183. |    Copyright (c) 1983 by Sun Microsystems, Inc.
  184. d19 3
  185. a21 7
  186. |
  187. | Startup code for standalone system
  188. | Non-relocating version -- for programs which are loaded by boot
  189. |
  190.  
  191.     .globl    _end
  192.     .globl    _edata
  193. d23 2
  194. a24 3
  195.     .globl    __exit
  196.     .globl    __exitto
  197.     .globl    _openfirst
  198. d26 5
  199. a30 7
  200. HIGH = 0x2700
  201.  
  202.     .globl    entry
  203. entry:
  204.     movw    #HIGH,sr        | just in case
  205. leax:    lea    pc@@(entry-(leax+2)),a0    | True current location of "entry"
  206.     lea    entry:l,a1        | Desired      location of "entry"
  207. d33 1
  208. a33 1
  209.     movl    #_end,d0        | Desired end of program
  210. d41 3
  211. a43 3
  212.     movl    sp,entry-4:l        | Save old stack pointer value
  213.     lea    entry-4:l,sp        | Set up new stack below load point
  214.     movl    #_edata,a0
  215. d46 1
  216. a46 1
  217.     cmpl    #_end,a0
  218. d48 4
  219. a51 2
  220.     movl    #1,_openfirst
  221. | FIXME, should push argc and argv (from bootparam.h) here.
  222. d56 2
  223. a57 2
  224.     jsr    _exit            | after main() returns, call exit().
  225. | Just fall thru into __exit if exit() ever returns.
  226. d59 2
  227. a60 2
  228. __exit:
  229.     movl    entry-4:l,sp        | Restore caller's stack pointer
  230. d64 2
  231. a65 3
  232. | we (srt0.s) received when we were started.  Note that this does NOT call
  233. | exit() -- you'd better close your files yourself.
  234. __exitto:
  235. d67 1
  236. a67 1
  237.     movl    entry-4:l,sp        | Restore caller's stack pointer
  238. @
  239.